package sort.leetcode_1122_easy_costume_sort;

import java.util.HashMap;
import java.util.Map;

class Solution {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1,3,4};
        int[] arr2 = new int[]{3,2,1,};
        new Solution().relativeSortArray(arr1,arr2);
    }
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        if (arr1 == null || arr1.length == 0) {
            return new int[]{};
        }
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < arr2.length; i++) {
            map.put(arr2[i], i);
        }
        mergeSort(arr1,map);
        return arr1;
    }

    private void mergeSort(int[] arr1, Map<Integer, Integer> map) {
        less(arr1[0],arr1[1],map);
    }

    public boolean less(int x, int y, Map<Integer, Integer> record) {
        //如果x, y 都出现在arr2中，直接比较对应位置
        if (record.containsKey(x) && record.containsKey(y)) {
            //在数组中，靠前的位置更小。
            return record.get(x) < record.get(y);
        } else if (record.containsKey(x)) {
            //如果只有1个出现在arr2中， 先出现的更小，x先出现说明 x < y
            return true;
        } else if (record.containsKey(y)) {
            //先出现y，说明 x > y 不符合排序规则
            return false;
        } else {
            /*
                x,y都没出现在arr2中，那么按照题目要求： 未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
                直接比较x,y的大小
             */
            return x < y;
        }
    }
}
